/**
 * 音频相关数据类型定义
 */

import type { ApiResponse, LanguageType, PageParams, PageResult } from './common'

// ==================== 基础数据类型 ====================

/**
 * 音频资源响应VO
 */
export interface AudioResourceRespVO {
  /** 音频ID */
  id: number
  /** 音频标题 */
  title: string
  /** 音频副标题/描述 */
  subtitle?: string
  /** 音频文件URL */
  audioUrl: string
  /** 封面图片URL */
  cover?: string
  /** 音频时长（秒） */
  duration: number
  /** 音频时长（格式化字符串，如 "05:23"） */
  durationText?: string
  /** 音频分类 */
  category: AudioCategoryType
  /** 语言类型 */
  language: LanguageType
  /** 关联绘本ID */
  bookId?: number
  /** 关联绘本集ID */
  bookSetId?: number
  /** 排序权重 */
  sortOrder?: number
  /** 是否启用 */
  enabled?: boolean
  /** 播放次数 */
  playCount?: number
  /** 点赞数 */
  likeCount?: number
  /** 是否已点赞 */
  isLiked?: boolean
  /** 是否已收藏 */
  isFavorited?: boolean
  /** 播放状态 */
  playStatus?: {
    /** 播放进度（秒） */
    playProgress: number
    /** 是否播放完成 */
    isCompleted: boolean
    /** 播放次数 */
    playCount: number
    /** 最后播放时间 */
    lastPlayAt?: string
  }
  /** 创建时间 */
  createTime?: string
  /** 更新时间 */
  updateTime?: string
}

/**
 * 音频播放记录请求VO
 */
export interface AudioPlayReqVO {
  /** 音频ID */
  audioId: number
  /** 播放进度（秒） */
  playProgress?: number
  /** 播放时长（秒） */
  playDuration?: number
  /** 是否播放完成 */
  isCompleted?: boolean
}

/**
 * 音频播放记录响应VO
 */
export interface AudioPlayRecordRespVO {
  /** 记录ID */
  id: number
  /** 用户ID */
  userId: number
  /** 音频ID */
  audioId: number
  /** 音频信息 */
  audio?: AudioResourceRespVO
  /** 播放进度（秒） */
  playProgress: number
  /** 播放时长（秒） */
  playDuration: number
  /** 是否播放完成 */
  isCompleted: boolean
  /** 最后播放时间 */
  lastPlayAt: string
  /** 播放次数 */
  playCount: number
  /** 创建时间 */
  createTime: string
}

// ==================== 枚举类型 ====================

/**
 * 音频分类类型
 */
export type AudioCategoryType
  = | 'all' // 全部
    | 'recent' // 最近播放
    | 'english' // 英文
    | 'chinese' // 中文
    | 'favorite' // 收藏

/**
 * 音频质量类型
 */
export type AudioQualityType
  = | 'high' // 高质量
    | 'medium' // 中等质量
    | 'low' // 低质量

/**
 * 音频类型
 */
export type AudioType
  = | 'official' // 官方音频
    | 'user' // 用户录制
    | 'ai' // AI生成

// ==================== 请求参数类型 ====================

/**
 * 音频列表查询参数
 */
export interface AudioListParams extends PageParams {
  /** 分类 */
  category?: AudioCategoryType
  /** 语言类型 */
  language?: LanguageType
  /** 关键词搜索 */
  keyword?: string
  /** 绘本ID */
  bookId?: number
  /** 绘本集ID */
  bookSetId?: number
  /** 排序字段 */
  sortBy?: 'createTime' | 'playCount' | 'likeCount' | 'title'
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc'
}

/**
 * 音频搜索参数
 */
export interface AudioSearchParams extends PageParams {
  /** 搜索关键词 */
  keyword: string
  /** 分类过滤 */
  category?: AudioCategoryType
  /** 语言过滤 */
  language?: LanguageType
}

/**
 * 推荐音频参数
 */
export interface RecommendedAudioParams {
  /** 语言类型 */
  language?: LanguageType
  /** 限制数量 */
  limit?: number
}

/**
 * 最近播放音频参数
 */
export interface RecentAudioParams {
  /** 限制数量 */
  limit?: number
}

/**
 * 清空播放记录参数
 */
export interface ClearPlayRecordsParams {
  /** 分类（可选，如果指定则只清空该分类） */
  category?: AudioCategoryType
}

// ==================== 收藏相关类型 ====================

/**
 * 音频收藏请求VO
 */
export interface AudioFavoriteReqVO {
  /** 音频ID */
  audioId: number
  /** 收藏备注 */
  remark?: string
}

/**
 * 音频收藏状态响应VO
 */
export interface AudioFavoriteStatusRespVO {
  /** 音频ID */
  audioId: number
  /** 是否已收藏 */
  isFavorited: boolean
  /** 收藏时间 */
  favoriteTime?: string
}

/**
 * 批量检查音频收藏状态请求VO
 */
export interface BatchAudioFavoriteCheckReqVO {
  /** 音频ID列表 */
  audioIds: number[]
}

/**
 * 批量音频收藏状态响应VO
 */
export interface BatchAudioFavoriteStatusRespVO {
  /** 音频收藏状态列表 */
  items: AudioFavoriteStatusRespVO[]
}

// ==================== API响应包装类型 ====================

/**
 * 音频列表API响应
 */
export type AudioListResponse = ApiResponse<PageResult<AudioResourceRespVO>>

/**
 * 音频详情API响应
 */
export type AudioDetailResponse = ApiResponse<AudioResourceRespVO>

/**
 * 音频搜索API响应
 */
export type AudioSearchResponse = ApiResponse<PageResult<AudioResourceRespVO>>

/**
 * 推荐音频API响应
 */
export type RecommendedAudioResponse = ApiResponse<AudioResourceRespVO[]>

/**
 * 最近播放音频API响应
 */
export type RecentAudioResponse = ApiResponse<AudioResourceRespVO[]>

/**
 * 音频播放记录API响应
 */
export type AudioPlayRecordResponse = ApiResponse<number>

/**
 * 播放记录列表API响应
 */
export type PlayRecordListResponse = ApiResponse<PageResult<AudioPlayRecordRespVO>>

/**
 * 音频收藏API响应
 */
export type AudioFavoriteResponse = ApiResponse<boolean>

/**
 * 音频收藏状态API响应
 */
export type AudioFavoriteStatusResponse = ApiResponse<AudioFavoriteStatusRespVO>

/**
 * 批量音频收藏状态API响应
 */
export type BatchAudioFavoriteStatusResponse = ApiResponse<BatchAudioFavoriteStatusRespVO>

// ==================== 分类标签配置 ====================

/**
 * 音频分类标签配置
 */
export interface AudioCategoryTab {
  /** 分类键值 */
  key: AudioCategoryType
  /** 显示标签 */
  label: string
  /** 图标（可选） */
  icon?: string
}

/**
 * 默认分类标签配置
 */
export const DEFAULT_AUDIO_CATEGORY_TABS: AudioCategoryTab[] = [
  { key: 'all', label: '全部' },
  { key: 'recent', label: '最近播放' },
  { key: 'english', label: '英文' },
  { key: 'chinese', label: '中文' },
  { key: 'favorite', label: '收藏' },
]

// ==================== 工具函数类型 ====================

/**
 * 音频时长格式化函数类型
 */
export type FormatDurationFunction = (seconds: number) => string

/**
 * 音频时长解析函数类型
 */
export type ParseDurationFunction = (durationText: string) => number
